电池装配功能包interface接口定义
修订日期 | 修订版本 | 修订内容 | 修订人 |
---|---|---|---|
2023.12.18 | V0.1 | 初始化文档 | 张弛 |
[TOC]
一、电池装配功能实现过程总述
上述流程忽略接近阶段以及结束阶段。
二、功能包设计原则
1、按功能抽象出规划功能包及控制功能包,每个阶段均由一个规划功能包,一个控制功能包(若该阶段不涉及规划或控制则无)。
2、规划/控制功能包,均有一个使能函数,一个获取/计算函数。
3、结束阶段的判断耦合在插入阶段
三、功能包设计详细阐述
1、规划功能包
规划器初始化设置接口
/** * @brief 规划器初始化功能包 * @param robot: 机器人指针 * @param type: 曲线类型,具体含义参见TrajTpye * @param trajMsg: 轨迹参数, 具体含义参见AssembleTrajMsg * @param track: 轨迹路径点,第一个点为起始点,最后一点为终止点 * @return: 返回值 < 0 表示规划失败 */ int FPAssembleTrajPlan(const ARAL::interface::ARALIntfacePtr& robot, const TrajTpye& type, const TrajMsg& trajMsg, const std::vector<interface::Array6d>& track);
获取规划器结果接口
/** * @brief 获取规划器路径信息 * @param robot: 机器人指针 * @return: 周期返回轨迹规划PVA */ RefPVA FPgetTrajPoint(const ARAL::interface::ARALIntfacePtr& robot);
相关结构体定义
enum class TrajTpye : int { joint = 0, // 关节空间 //笛卡尔空间 straight = 10, // 直线轨迹 sine = 11, // 正弦摆线 trapezoid = 12, // 梯形摆线 planarspiral = 13, // 平面螺旋 spatialspiral = 14, // 空间螺旋 }; struct TrajMsg { interface::CurveType curve; // 曲线属性 interface::DescribeSpace space = interface::DescribeSpace::CARTESIAN; // 运动空间 interface::MoveMode mode = interface::MoveMode::POSITION; // 规划模式 std::vector<double> move_times{.0}; // 运动时间 std::vector<double> max_vel; // 最大速度 std::vector<double> max_acc; // 最大加速度 std::vector<double> max_jerk; // 最大加加速度 }; struct RefTrajPVA { interface::RLJntArray q_ref; // 参考位置 interface::RLJntArray qd_ref; // 参考速度 interface::RLJntArray qdd_ref; // 参考加速度 };// 规划轨迹输出
2、控制功能包
控制功能使能接口
/** * @brief 装配功能控制器使能 * @param robot: 机器人指针 * @param params: 控制器参数,具体含义 * @return: 返回值 < 0,表示设置失败 */ int FPAssembleEnable(const ARAL::interface::ARALIntfacePtr& robot, AssembleStatus& status, const FCcontrollerParam& params);
控制功能输出接口
/** * @brief 装配功能控制输出 * @param robot_model: 机器人指针 * @param ta: 装配功能周期输入参数,具体含义见ToolAssembly * @param cmd_res: 控制器 * @param overflag: 阶段结束标志,返回true则进入下一阶段 * @param contactflag: 接触标志, 返回true表示工具接触(详细用法见装配功能包说明文档) * @param pos: 接触点位姿或者回退点位姿,取决于阶段 * @return: 返回值 < 0 表示计算失败 */ int FDAssembleCMDout(const ARAL::interface::ARALIntfacePtr& robot, const AssemblyStateParams& as, AssemblyCraftParams& ac, interface::RLJntArray& cmd_res,bool& overflag, bool& contactflag, interface::RLJntArray& pos);
说明:在定位阶段,确定螺钉位置过程中返回最终定位点的姿态,完整的回退路径不在Aral_interface中提供
相关结构体定义
struct FCcontrollerParam { interface::DescribeSpace space = interface::DescribeSpace::CARTESIAN; // 控制器空间 std::vector<int> fc_enable = {1, 1, 1, 1, 1, 1}; // 笛卡尔空间/关节空间力控开关 interface::RLJntArray goal_force = {0.0}; // 目标力 interface::RLJntArray M; // 质量 interface::RLJntArray D; // 阻尼 interface::RLJntArray K; // 刚度 std::vector<double> force_limit = {120.0, 120.0, 120.0, 60.0, 60.0, 60.0}; // 控制器输入力限制值 std::vector<double> force_threshold = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // 控制器输入力阈值 };// 力控参数结构体 struct AssemblyStateParams { RobotState state; // 机械臂状态 interface::RLPose task_Frame; // 控制坐标系相对于基坐标系的位姿 std::vector<double> ref_q, ref_qd, ref_qdd; // 参考路径点关节空间位置 速度 加速度 }; // 电池装配功能包实时参数结构体 struct AssemblyCraftParams { AssembleStatus status; // 装配阶段类别 double HoleDepth; // 孔深(插孔阶段必须设置) }; // 电池装配功能包工艺参数结构体(逐渐扩充) struct RobotState { interface::RLJntArray q; // 关节位置 interface::RLJntArray qd; // 关节速度 interface::RLJntArray qdd; // 关节加速度 interface::RLJntArray torq; // 关节实际力矩,单位Nm interface::RLJntArray temp; // 关节温度,单位为摄氏度(℃) interface::RLJntArray friction; // 关节摩擦力,单位Nm interface::RLWrench sensor; // 传感器在每个维度方向的测量数据(减去偏置) bool has_sensor = false; // 是否存在力传感器,默认为否 }; // 机器人状态结构体 enum class AssembleStatus : int { locate_z = 1, // Z轴定位 local_insert_detect = 2, // 检测轴孔装配状态 locate_xy = 3, // 螺栓定位 locate_move = 4, // 移动至定位点 search_z = 5, // Z轴探寻 search_insert_detect = 6, // 检测轴孔装配状态 searc_xy = 7, // XY平面搜索 insert = 8, // 轴/孔插入 };
四、程序执行流
以上为主流程的程序执行概述,具体程序执行顺序参考第一章流程图
1、加速度约束,笛卡尔空间如何去约束(规划器参数约束)
2、getTrajPoint需要细化处理